package com.rpss.fichamento.telas;

import java.util.ArrayList;
import java.util.List;

import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.ContextMenu;
import android.view.ContextMenu.ContextMenuInfo;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.ListView;

import com.rpss.fichamento.R;
import com.rpss.fichamento.dao.RepositorioFichamento;
import com.rpss.fichamento.entidade.Fichamento;
import com.rpss.fichamento.entidade.Obra;
import com.rpss.fichamento.fachada.FichamentoFachada;

public class ListarFichamentosActivity extends Activity {

	private static final String CATEGORIA = "fichamento";
	
	// Menu principal
	protected static final int INSERIR = 0;

	// Menu de contexto
	protected static final int EDITAR = 0;
	protected static final int REMOVER = 1;
	
	private Obra obra;
	private List<Fichamento> fichamentos;
	private ArrayList<String> str_fichamentos;
	private Long idFichamentoRemocao;
	
	protected static final int MENU_NORMAL = 0;
	protected static final int MENU_CONTEXTO = 1;
	private int menuSelecionado;

	private FichamentoFachada fachada;

	@Override
	public void onCreate(Bundle savedInstanceState) {
		Log.i(CATEGORIA, "in VisualizarFichamentos 1");
		super.onCreate(savedInstanceState);
		setContentView(R.layout.listar_fichamentos);

		//RepositorioFichamento repo = new RepositorioFichamento(this);

		Log.i(CATEGORIA, "in VisualizarFichamentos 2");
		fachada = new FichamentoFachada();
		Log.i(CATEGORIA, "in VisualizarFichamentos 3");
		//obras = fachada.recuperarObras();
		Intent it = getIntent();
		Log.i(CATEGORIA, "in VisualizarFichamentos 4");
		if (it != null) {
			Log.i(CATEGORIA, "in VisualizarFichamentos 5");
			Bundle params = it.getExtras();
			Log.i(CATEGORIA, "in VisualizarFichamentos 6");

			if (params != null) {
				Log.i(CATEGORIA, "in VisualizarFichamentos 7");
				Long idObra = params.getLong("idObra");
				Log.i(CATEGORIA, "in VisualizarFichamentos 8");
				obra = fachada.recuperarObra(idObra);
				Log.i(CATEGORIA, "in VisualizarFichamentos 9");
				atualizarListaDeFichamentos();
			}
			Log.i(CATEGORIA, "in VisualizarFichamentos 14");
		}
		Log.i(CATEGORIA, "in VisualizarFichamentos 15");
	}

	@Override
	public void onCreateContextMenu(ContextMenu menu, View v,
			ContextMenuInfo menuInfo) {
		menuSelecionado = MENU_CONTEXTO;
		if (v.getId() == R.id.listarFichamentosView) {
			AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo) menuInfo;
			menu.setHeaderTitle("Menu");
			String[] menuItems = getResources().getStringArray(R.array.menuContextoFichamento);
			for (int i = 0; i < menuItems.length; i++) {
				menu.add(Menu.NONE, i, i, menuItems[i]);
			}
		}
	}

//	@Override
//	public boolean onContextItemSelected(MenuItem item) {
//		AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo) item
//				.getMenuInfo();
//		int menuItemIndex = item.getItemId();
//		String[] menuItems = getResources().getStringArray(R.array.menu);
//		String menuItemName = menuItems[menuItemIndex];
//		// String listItemName = Countries[info.position];
//		//
//		// TextView text = (TextView) findViewById(R.id.footer);
//		// text.setText(String.format("Selected %s for item %s", menuItemName,
//		// listItemName));
//		return true;
//	}
	
	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		super.onCreateOptionsMenu(menu);
		menuSelecionado = MENU_NORMAL;
		MenuItem mn = menu.add(0, INSERIR, 0, "Inserir Novo");
		mn.setIcon(R.drawable.novo);
		mn.setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS);
		// menu.add(0, BUSCAR, 0, "Buscar").setIcon(R.drawable.pesquisar);
		return true;
	}
	
	@Override
	public boolean onMenuItemSelected(int featureId, MenuItem item) {
		// Clicou no menu

		Intent itEditarFichamento;
		
		if (menuSelecionado == MENU_NORMAL) {

			switch (item.getItemId()) {
			case INSERIR:
				itEditarFichamento = new Intent(this, EditarFichamento.class);
				Bundle params = new Bundle();
				params.putLong("idObra", obra.id);
				itEditarFichamento.putExtras(params);
				
				// Abre a tela com o formulario para adicionar
				startActivityForResult(itEditarFichamento, INSERIR);
				// Toast.makeText(this, "Inserir Editar", Toast.LENGTH_SHORT);
				break;
			// case BUSCAR:
			// // Abre a tela para buscar o mes pelo mes
			// startActivity(new Intent(this, BuscarObra.class));
			// //Toast.makeText(this, "Inserir Editar", Toast.LENGTH_SHORT);
			// break;
			}
			return true;

		} else {
			
			AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo) item
					.getMenuInfo();
			itEditarFichamento = new Intent(this, EditarFichamento.class);
			Bundle params = new Bundle();
			params.putLong("idObra", obra.id);
			Log.i(CATEGORIA, "idFichamento=" + fichamentos.get(info.position).id);
			params.putLong("idFichamento", fichamentos.get(info.position).id);
			itEditarFichamento.putExtras(params);

			Log.i(CATEGORIA, "menuItemId=" + item.getItemId());
			switch (item.getItemId()) {
			case EDITAR:
				// Abre a tela com o formulario para adicionar
				startActivityForResult(itEditarFichamento, EDITAR);
				// Toast.makeText(this, "Inserir Editar", Toast.LENGTH_SHORT);
				break;
			case REMOVER:
				// Abre a tela para buscar o mes pelo mes
				// startActivity(new Intent(this, BuscarObra.class));
				idFichamentoRemocao = fichamentos.get(info.position).id;
				removerFichamento();
				// Toast.makeText(this, "Inserir Editar", Toast.LENGTH_SHORT);
				break;
			}
			menuSelecionado = MENU_NORMAL;
			return true;
		}
	}
	
	protected void onActivityResult(int codigo, int resultado, Intent intent) {
		atualizarListaDeFichamentos();
	}
	
	private void atualizarListaDeFichamentos() {
		Log.i(CATEGORIA, "texto Obra="+obra.texto);
		fichamentos = fachada.recuperarFichamentos(obra);
		Log.i(CATEGORIA, "in VisualizarFichamentos 10");				
		str_fichamentos = new ArrayList<String>();
		for (int i = 0; i < fichamentos.size(); i++) {
			str_fichamentos.add(fichamentos.get(i).texto);
		}
		Log.i(CATEGORIA, "in VisualizarFichamentos 11");
		ListView list = (ListView) findViewById(R.id.listarFichamentosView);
		ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
				R.layout.listar_fichamento, str_fichamentos);
		list.setAdapter(adapter);
		Log.i(CATEGORIA, "in VisualizarFichamentos 12");
		registerForContextMenu(list);
		Log.i(CATEGORIA, "in VisualizarFichamentos 13");
	}

	private void removerFichamento() {
		AlertDialog.Builder dialog = new AlertDialog.Builder(this);
		dialog.setMessage("Deseja realmente remover este fichamento?");
		dialog.setPositiveButton("Sim", new DialogInterface.OnClickListener() {
			@Override
			public void onClick(DialogInterface di, int arg) {
				Log.i(CATEGORIA, "Sim");
				fachada.excluirFichamento(idFichamentoRemocao);
				atualizarListaDeFichamentos();
			}
		});

		// botao nao executa algo se o botao nao for pressionado
		dialog.setNegativeButton("Nao", new DialogInterface.OnClickListener() {
			@Override
			public void onClick(DialogInterface di, int arg) {
				Log.i(CATEGORIA, "Nao");
			}
		});
		dialog.setTitle("Aviso");
		dialog.show();
	}
}
